#pragma once

namespace MOE
{
	namespace Core
	{

		// Enum for all basic types.
		enum BasicType
		{
			kNil,
			kInt8,
			kUint8,
			kInt16,
			kUint16,
			kInt32,
			kUint32,
			kInt64,
			kUint64,
			kFloat32,
			kFloat64,

			// Counter
			kNumBasicTypes,
		};

		// Enum for reference types.
		enum ReferenceType
		{
			// Just value.
			kValue,

			// Reference / pointer.
			kReference,
		};

		// Enum for array types.
		enum ArrayType
		{
			// Not array.
			kSingle,

			// Embedded, static-sized array.
			// Field with this type stores the array within the class.
			kEmbeddedArray,

			// Dynamic-sized array.
			// Field with this type only stores a reference to the array in the class.
			kRemoteArray,
		};

		extern const char* const kBasicTypeNames[BasicType::kNumBasicTypes];
	}
}